package xs.szw.service.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import xs.szw.common.model.Option;
import xs.szw.service.model.vo.RoleVo;
import xs.szw.service.model.dto.RoleDto;
import xs.szw.service.model.pojo.sys.Role;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Set;

/**
* @author asus
* @description 针对表【sys_role(角色表)】的数据库操作Service
* @createDate 2025-02-10 18:37:27
*/
public interface RoleService extends IService<Role> {

    /**
     * 创建角色。
     *
     * @param roleDto 包含新角色信息的DTO。
     * @return 包含操作结果的Result对象。
     */
    void createRole(RoleDto roleDto);

    /**
     * 更新角色。
     *
     * @param roleDto 包含要更新的角色信息的DTO。
     * @return 包含操作结果的Result对象。
     */
    boolean updateRole(RoleDto roleDto);

    /**
     * 删除角色。
     *
     * @param id 要删除的角色的ID。
     * @return 包含操作结果的Result对象。
     */
    boolean deleteRoleWithRelations(Long id);

    /**
     * 根据ID获取角色的详细信息。
     *
     * @param id 要获取的角色的ID。
     * @return 包含操作结果的Result对象，其中包含角色的详细信息。
     */
    RoleVo getRole(Long id);


    /**
     * 获取角色分页列表
     * @param current
     * @param size
     * @param roleName
     * @return
     */
    Page<RoleVo> getRolePage(Integer current, Integer size, String roleName);

    /**
     * 获取角色下拉列表
     *
     * @return
     */
    List<Option<Long>> getRoleList();

    /**
     * 批量删除角色
     * @param ids
     * @return
     */
     boolean deleteBatchRoleWithRelations(List<Long> ids);

    /**
     * 获取最大范围的数据权限
     * @param roles
     * @return
     */
    Integer getMaximumDataScope(Set<String> roles);
}
